package com.mbyte.easy.security.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mbyte.easy.security.entity.SysUser;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface SysUserMapper extends BaseMapper<SysUser> {
	int deleteByPrimaryKey(Long id);

	int insert(SysUser record);

	int insertSelective(SysUser record);

	SysUser selectByPrimaryKey(Long id);
	
	/**
	 * 根据用户名查找唯一用户
	 * @param userName
	 * @return
	 */
	SysUser selectByUsername(String userName);

	/**
	 *  根据条件查询用户信息
	 * 
	 * @param user
	 * @return
	 */
	List<SysUser> selectByUser(SysUser user);
	
	

	int updateByPrimaryKeySelective(SysUser record);

	int updateByPrimaryKey(SysUser record);

	/**
	 * 分页查询数据
	 * @param page
	 * @param username
	 * @return
	 */
	IPage<SysUser> selectByUserForPage(Page page, @Param("username") String username);

	/**
	 * @return
	 * @Author 张雪
	 * @Description 查询用户信息
	 * @Date 2019/12/9 14:48
	 * @Param
	 **/
	List<SysUser> allotBefore(String username);

	/**
	 * @return
	 * @Author 张雪
	 * @Description 查询登录用户的所有下属用户
	 * @Date 2019/12/10 9:48
	 * @Param
	 **/
	List<SysUser> selectAllWorker(String username);

	/**
	 * @Author 张雪
	 * @Description 根据用户名查询用户ID
	 * @Date 2019/12/11 14:06
	 * @Param
	 * @return
	 **/
	Long selectUserIdByUsername(String username);

	/**
	 * 根据id数组批量查询数据，并分页
	 * @author myr
	 * @param page
	 * @param userList
	 * @Author myr
	 * @return
	 */
	IPage<SysUser> selectByUserIdForPage(Page page, @Param("userList") List<Long> userList);

	/**
	 * @Author//宋昱
	 * @Description //根据name查id
	 * @Date 2019/12/10 17:40
	 **/
	Long getUserIdByUsernameAudio(String username);
	/**
	 * @Author//宋昱
	 * @Description //根据id查询父级
	 * @Date 2019/12/10 20:45
	 **/
	List<Long> getChildrenNameByChildrenIdAudio (Long parentId);

	/**
	 * 通过角色id 返回角色对应下属的用户信息
	 * @param page 分页
	 * @param roleId 角色id
	 * @param sysUser 用户表实体
	 * @Author  白章荣
	 * @return
	 */
	IPage<SysUser>findEverySysUserByRoleId(Page<SysUser>page,@Param("roleId")Long roleId,@Param("sysUser")SysUser sysUser);

	/**
	 * 通过用户id  找出下属角色没有上级的用户信息
	 * @param userId 用户id
	 * @Author 白章荣
	 * @return
	 */
	List<SysUser>findNoSuperiorUserByUserId(@Param("userId")Long userId);
	/**
	 * 通过角色id 找出下属角色没有上级的用户信息
	 * @param roleId 角色id
	 * @Author 白章荣
	 * @return
	 */
	List<SysUser >findNoSuperiorUserByRoleId(@Param("roleId")Long roleId);


	/**
	 * 通过角色id找到下级用户信息
	 * @param releId 角色id
	 * @return
	 */
	List<SysUser> findTheLowerLevelUserMessageByRoleId (@Param("roleId")Long releId);

	/**
	 * 通过用户id查找出用户的下属
	 * @param userId 用户id
	 * @return
	 */
	IPage<SysUser>findSubordinatesUserByUserID(Page<SysUser>page,@Param("userId")Long userId,@Param("sysUser")SysUser sysUser);


	/**
	 * 通过角色id 查找出对应的用户名字
	 * @param roleId 角色id
	 * @return
	 */
	List<SysUser> findUserNameByRoleId(@Param("roleId")Long roleId);

    Long getIdByUserName(String currentUsername);

	String getNameByUserId(Long allotnoId);
}